package test230610;

/**
 * @author 兴趣使然黄小黄
 * @version 1.0
 * @date 2023/6/10 15:03
 * 115. 不同的子序列
 * https://leetcode.cn/problems/distinct-subsequences/
 */
public class Solution05 {

    public int numDistinct(String s, String t) {
        int m = t.length();
        int n = s.length();
        // s[0, j] 子序列包含 t[0, i] 串的个数
        int[][] dp = new int[m + 1][n + 1];
        // 初始化
        for (int i = 0; i <= n; ++i) {
            dp[0][i] = 1;
        }
        // 动态规划过程
        for (int i = 1; i <= m; i++) {
            for (int j = 1; j <= n; j++) {
                dp[i][j] = dp[i][j - 1];
                if (t.charAt(i - 1) == s.charAt(j - 1)) {
                    dp[i][j] += dp[i - 1][j - 1];
                }
            }
        }
        return dp[m][n];
    }
}
